package main

import (
	"fmt"
	"math"
)

func solution(n int, a []int) string {
	// 用于存储所有不同的素因子
	primeFactors := make(map[int]bool)

	// 遍历数组中的每个元素，进行素因子分解
	for _, num := range a {
		// 从2开始尝试分解，直到sqrt(num)
		for i := 2; i <= int(math.Sqrt(float64(num))); i++ {
			// 如果num能被i整除，则i是一个素因子
			for num%i == 0 {
				primeFactors[i] = true // 将素因子i添加到集合中
				num /= i               // 将num除以i，继续分解
			}
		}
		// 如果num本身是一个素数（即num > 1），则将其添加到集合中
		if num > 1 {
			primeFactors[num] = true
		}
	}

	// 判断素因子的种类数是否超过数组的长度
	if len(primeFactors) > n {
		return "No" // 如果素因子种类数超过数组长度，返回"No"
	} else {
		return "Yes" // 否则，返回"Yes"
	}
}

func main() {
	// 测试样例
	fmt.Println(solution(4, []int{1, 2, 3, 4}) == "Yes") // 输出：true
	fmt.Println(solution(2, []int{10, 12}) == "No")      // 输出：true
	fmt.Println(solution(3, []int{6, 9, 15}) == "Yes")   // 输出：true
}
